﻿#region Using

using System.Threading.Tasks;

#endregion

namespace Vk.Methods.Status
{
    /// <summary>
    ///     Статус
    /// </summary>
    public class Status
    {
        private readonly Api _api;

        public Status(Api api)
        {
            _api = api;
        }

        /// <summary>
        ///     Получает текст статуса пользователя.
        /// </summary>
        /// <param name="userId">
        ///     Идентификатор пользователя, статус которого необходимо получить. Если параметр не задан, то
        ///     считается, что он равен идентификатору текущего пользователя.
        /// </param>
        /// <param name="groupId">Идентификатор сообщества, статус которого необходимо получить. </param>
        public async Task<StatusInfo> Get(int? userId = null, int? groupId = null)
        {
            var query = new ApiQuery("status.get")
                .Add("group_id", groupId)
                .Add("user_id", userId);

            var resp = await _api.Manager.Execute(query);
            return new StatusInfo(resp);
        }

        /// <summary>
        ///     Устанавливает новый статус текущему пользователю.
        /// </summary>
        /// <param name="text">
        ///     Текст статуса, который необходимо установить текущему пользователю. Если параметр не задан или
        ///     равен пустой строке, то статус текущего пользователя будет очищен.
        /// </param>
        /// <param name="groupId">Идентификатор сообщества, статус которого необходимо получить. </param>
        /// <returns>В случае успешной установки или очистки статуса возвращает true. </returns>
        public async Task<bool> Set(string text = null, int? groupId = null)
        {
            var query = new ApiQuery("status.set")
                .Add("group_id", groupId)
                .Add("text", text);

            var resp = await _api.Manager.Execute(query);
            return resp.Bool().Value;
        }
    }
}